package String_;

import java.util.Scanner;

/*
小明在编程中在命名函数名时会使用以下两种命名方法:
1.小驼峰命名法:除第一个单词之外，其他单词首字母大写，例如: newFunc,myVariable,myFirstName。
2.下划线命名法:所有单词字母都小写，并且用一个下划线连接不同单词，例如:new_func,my_variable,my_frst_name.
现在小明列出了他部分代码中的所有函数名，他想要将所有的函数名都统一成下划线命名法,由于编写时可能存在疏忽，
有些函数名使用的既不是小驼峰命名法也不是下划线命名法。现在他将他所列出的函数名都交给你，
对于每个函数名，你需要判断这个函数名使用的是小驼峰命名法还是下划线命名法，如果是小驼峰命名法，将其转换为下划线命名法输出;
如果已是下划线命名法，直接输出即可;若二者都不是，那么输出"indistinct”。
1<=n<=400

输入描述
第一行是一个整数n，表示有n个函数名。接下来n行，每行一个字符串，保证只包含英文字母字符和下划线，字符串长度均不超过30。
* */
public class SF1 {
    // 判断是否为小驼峰命名法
    private static boolean isCamelCase(String name) {
        return name.matches("[a-z]+[A-Z][a-zA-Z]*");
    }

    // 判断是否为下划线命名法
    private static boolean isSnakeCase(String name) {
        return name.matches("[a-z]+(_[a-z]+)*");
    }

    // 将小驼峰命名法转换为下划线命名法
    private static String convertCamelToSnake(String camelCaseName) {
        StringBuilder snakeCaseName = new StringBuilder();
        for (char ch : camelCaseName.toCharArray()) {
            if (Character.isUpperCase(ch)) {
                snakeCaseName.append('_').append(Character.toLowerCase(ch));
            } else {
                snakeCaseName.append(ch);
            }
        }
        return snakeCaseName.toString();
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        scanner.nextLine(); // 读取换行符

        for (int i = 0; i < n; i++) {
            String functionName = scanner.nextLine();

            if (isCamelCase(functionName)) {
                System.out.println(convertCamelToSnake(functionName));
            } else if (isSnakeCase(functionName)) {
                System.out.println(functionName);
            } else {
                System.out.println("indistinct");
            }
        }

        scanner.close();
}}
